インターフェイス型のVPCエンドポイントでサブネットを指定しないのダメ絶対
サブネットを指定しないとどうなるのか
こんにちは、のんピ(@non____97)です。
皆さんはVPCエンドポイント使っていますか? 私は使っています。
VPCエンドポイントはゲートウェイ型とインターフェイス型、Gateway Load Balancer型の3種類あります。
ふと、VPCエンドポイント作成のAPIであるCreateVpcEndpointを確認していると、サブネットIDを指定するパラメーターSubnetId.N
が必須でないことに気づきました。
SubnetId.N
(Interface and Gateway Load Balancer endpoints) The ID of one or more subnets in which to create an endpoint network interface. For a Gateway Load Balancer endpoint, you can specify one subnet only.
Type: Array of strings
Required: No
インターフェイス型とGateway Load Balancer型のVPCエンドポイントの場合に指定するようですが、必須とは一言も書かれていません。
そこで、サブネットを指定せずに、インターフェイス型のVPCエンドポイントを作成した場合にどのような影響があるのか確認します。
いきなりまとめ
- Amazon Provided DNSをDNSサーバーに指定した場合に、作成したVPCエンドポイントのサービスエンドポイントの名前解決ができなくなる
検証の構成
検証で使う環境の構成図は以下の通りです。
このVPC上に、サブネットを指定せずにVPCエンドポイントを作成するとどんな挙動をするのか確認します。
やってみた
検証環境のデプロイ
検証環境をAWS CDKでデプロイします。
AWS CDKのコードは以下の通りです。
import { aws_iam as iam, aws_ec2 as ec2, Stack, StackProps } from "aws-cdk-lib"; import { Construct } from "constructs"; export class Ec2InstaceStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // SSM IAM role const ec2InstanceIamRole = new iam.Role(this, "EC2 Instance IAM Role", { assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"), managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName( "AmazonSSMManagedInstanceCore" ), iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonEC2ReadOnlyAccess"), ], }); // VPC const vpc = new ec2.Vpc(this, "VPC", { cidr: "10.0.1.0/24", enableDnsHostnames: true, enableDnsSupport: true, natGateways: 0, maxAzs: 1, subnetConfiguration: [ { name: "Public", subnetType: ec2.SubnetType.PUBLIC, cidrMask: 26, }, ], }); // EC2 Instance new ec2.Instance(this, "EC2 Instance", { instanceType: new ec2.InstanceType("t3.micro"), machineImage: ec2.MachineImage.latestAmazonLinux({ generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2, }), vpc, blockDevices: [ { deviceName: "/dev/xvda", volume: ec2.BlockDeviceVolume.ebs(8, { volumeType: ec2.EbsDeviceVolumeType.GP3, }), }, ], propagateTagsToVolumeOnCreation: true, vpcSubnets: vpc.selectSubnets({ subnetType: ec2.SubnetType.PUBLIC, }), role: ec2InstanceIamRole, }); new ec2.SecurityGroup(this, "VPC Endpoint SG", { vpc, }).addIngressRule(ec2.Peer.ipv4(vpc.vpcCidrBlock), ec2.Port.tcp(443)); } }
VPCエンドポイントにアタッチするセキュリティグループも一緒に作成します。
名前解決の確認
サブネットを指定せずにVPCエンドポイントを作成する前に、サービスエンドポイントの名前解決ができることを確認します。
まず、リージョンのEC2のサービスエンドポイント(ec2.us-east-1.amazonaws.com
)に対する名前解決です。
$ dig ec2.us-east-1.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2.us-east-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51968 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ec2.us-east-1.amazonaws.com. IN A ;; ANSWER SECTION: ec2.us-east-1.amazonaws.com. 66 IN CNAME ec2.amazonaws.com. ec2.amazonaws.com. 28 IN A 209.54.182.97 ;; Query time: 1 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Wed Aug 24 02:13:05 UTC 2022 ;; MSG SIZE rcvd: 90
名前解決できました。ec2.us-east-1.amazonaws.com
はec2.amazonaws.com
のCNAMEのようですね。
また、SERVER: 10.0.1.2#53(10.0.1.2)
であることからAmazon Provided DNSを使って名前解決していることが分かります。
次に、ec2.amazonaws.com
です。
$ dig ec2.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36470 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ec2.amazonaws.com. IN A ;; ANSWER SECTION: ec2.amazonaws.com. 56 IN A 52.46.155.190 ;; Query time: 0 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Wed Aug 24 02:28:22 UTC 2022 ;; MSG SIZE rcvd: 62
こちらもAmazon Provided DNSを使って名前解決できました。
ついでにAWSのAPIを叩けることも確認しておきましょう。
自身のEC2インスタンスIDをdescribe-instancesで出力します。
# インスタンスメタデータからインスタンスIDを取得 $ instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) # 自身のインスタンスIDをAWS CLIで表示 $ aws ec2 describe-instances \ --instance-ids "$instance_id" \ --query 'Reservations[*].Instances[*].{Instance:InstanceId}' \ --region us-east-1 [ [ { "Instance": "i-021d5a5d8a3770f22" } ] ]
正しく実行できました。
サブネットを指定せずにVPCエンドポイントを作成してみる
それでは、サブネットを指定せずにEC2のVPCエンドポイントを作成してみます。
# VPCエンドポイントの作成 $ aws ec2 create-vpc-endpoint \ --vpc-id vpc-07715c76106d55335 \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.ec2 \ --security-group-ids sg-0d60564602ac7b781 \ --region us-east-1 { "VpcEndpoint": { "VpcEndpointId": "vpce-0d4e6262d3e098393", "VpcEndpointType": "Interface", "VpcId": "vpc-07715c76106d55335", "ServiceName": "com.amazonaws.us-east-1.ec2", "State": "pending", "RouteTableIds": [], "SubnetIds": [], "Groups": [ { "GroupId": "sg-0d60564602ac7b781", "GroupName": "Ec2InstaceStack-VPCEndpointSG3E5EA584-3S12B3HWZ9I0" } ], "IpAddressType": "ipv4", "DnsOptions": { "DnsRecordIpType": "ipv4" }, "PrivateDnsEnabled": true, "RequesterManaged": false, "NetworkInterfaceIds": [], "DnsEntries": [], "CreationTimestamp": "2022-08-29T00:25:48.965000+00:00", "OwnerId": "<AWSアカウントID>" } } # VPCエンドポイントの確認 $ aws ec2 describe-vpc-endpoints { "VpcEndpoints": [ { "VpcEndpointId": "vpce-0d4e6262d3e098393", "VpcEndpointType": "Interface", "VpcId": "vpc-07715c76106d55335", "ServiceName": "com.amazonaws.us-east-1.ec2", "State": "available", "PolicyDocument": "{\n \"Statement\": [\n {\n \"Action\": \"*\", \n \"Effect\": \"Allow\", \n \"Principal\": \"*\", \n \"Resource\": \"*\"\n }\n ]\n}", "RouteTableIds": [], "SubnetIds": [], "Groups": [ { "GroupId": "sg-0d60564602ac7b781", "GroupName": "Ec2InstaceStack-VPCEndpointSG3E5EA584-3S12B3HWZ9I0" } ], "IpAddressType": "ipv4", "DnsOptions": { "DnsRecordIpType": "ipv4" }, "PrivateDnsEnabled": true, "RequesterManaged": false, "NetworkInterfaceIds": [], "DnsEntries": [], "CreationTimestamp": "2022-08-29T00:25:48.965000+00:00", "Tags": [], "OwnerId": "<AWSアカウントID>" } ] }
コマンドの出力結果を確認したところ、サブネットとENIのレスポンスが空欄になってますね。
VPCエンドポイントのサブネットを指定していない状態で名前解決
この状態で名前解決してみます。
まず、ec2.us-east-1.amazonaws.com
を名前解決してみます。
$ dig ec2.us-east-1.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2.us-east-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42694 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ec2.us-east-1.amazonaws.com. IN A ;; AUTHORITY SECTION: ec2.us-east-1.amazonaws.com. 900 IN SOA ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400 ;; Query time: 1 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Mon Aug 29 00:26:52 UTC 2022 ;; MSG SIZE rcvd: 140
名前解決できなくなりました。
DNSサーバーをAmazon Provided DNS以外のものに指定して、再度名前解決してみます。
$ dig ec2.us-east-1.amazonaws.com @1.1.1.1 ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2.us-east-1.amazonaws.com @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47592 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;ec2.us-east-1.amazonaws.com. IN A ;; ANSWER SECTION: ec2.us-east-1.amazonaws.com. 492 IN CNAME ec2.amazonaws.com. ec2.amazonaws.com. 9 IN A 209.54.177.247 ;; Query time: 1 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Mon Aug 29 00:26:59 UTC 2022 ;; MSG SIZE rcvd: 90
こちらは名前解決できました。
また、digのオプションに+trace
をつけて、ルートから名前解決してみます。
$ dig ec2.us-east-1.amazonaws.com +trace ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2.us-east-1.amazonaws.com +trace ;; global options: +cmd . 36 IN NS a.root-servers.net. . 36 IN NS b.root-servers.net. . 36 IN NS c.root-servers.net. . 36 IN NS d.root-servers.net. . 36 IN NS e.root-servers.net. . 36 IN NS f.root-servers.net. . 36 IN NS g.root-servers.net. . 36 IN NS h.root-servers.net. . 36 IN NS i.root-servers.net. . 36 IN NS j.root-servers.net. . 36 IN NS k.root-servers.net. . 36 IN NS l.root-servers.net. . 36 IN NS m.root-servers.net. ;; Received 239 bytes from 10.0.1.2#53(10.0.1.2) in 0 ms com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 com. 86400 IN RRSIG DS 8 1 86400 20220910170000 20220828160000 20826 . ZOcv63FA+cxvmB97V4p5dhYmKhcuhrVVdL9cADFPnJHhnWr5UR0Tz7nG y4slLiY2BOdXZTmiS9U3DVbJU7ZUcUhRxSgSn/m+FjaunhFxBzGvBUJ3 Ojs6AzDC393eJ3rGj4sqJonaCEl1PknRoBh9IewR93wG/x6Q/2jZceh0 iX5CF3R84tyqzOd81FkvCdz8N2Ll0ksulGPTnZVcfFxi/g3n67ABu/mj KEaA1DBdi0pmlQa+JrCU4RQ5jlbhH47IY3HLo7OmaD3iiEnXtRKMSW10 h9trIxoPMKUGKGYugx70t19w3eUuWP7KMYnqbpofmbEify4zmHA1clWK HKLCVw== ;; Received 1187 bytes from 192.5.5.241#53(f.root-servers.net) in 1 ms amazonaws.com. 172800 IN NS u1.amazonaws.com. amazonaws.com. 172800 IN NS u2.amazonaws.com. amazonaws.com. 172800 IN NS r1.amazonaws.com. amazonaws.com. 172800 IN NS r2.amazonaws.com. CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20220904042433 20220828031433 32298 com. Q8/GURHUPmV/ykhy1kMRfOyVR4SElk51JPrRU8ZNQaqSdSS6LHMibxKH mZLhMJTZKmLIQuvOLw+6r8Y/QB/g8onzYAuFILpc7Um8gAHY6tfJhO6a LHRlbYzAAvnEUlQ4ydgsE3C6/BKRw+YmalYmQTHdtbI/nEHKWJMSWWO1 cWugKBKwXk/9roUzi1dwsbdSDuhCHkurzy0/dErTk7O0lA== F1RGUCLKMTBFFL151IQ24FPP76MU5QO7.com. 86400 IN NSEC3 1 1 0 - F1RHC3NO0KSGMN6J90SGARJ7FQ7CH0QR NS DS RRSIG F1RGUCLKMTBFFL151IQ24FPP76MU5QO7.com. 86400 IN RRSIG NSEC3 8 2 86400 20220901060128 20220825045128 32298 com. DxTTpawF/cDmmc0fTiwxNwKduA4ZlvTZHCSxDLKNlrUvdK5mHS9HuPr3 Uajd0VLc1KAk6rx3a/Oj0/rfoKdc/36NPBIOIaobCOGGPeTYU2Hfl+ft TTLYFQ8l4BnHbeOEyg0sJWB/bCFEiBYz7yCX5X5N1C5p3EClQAIq+MCY 8GNEVfSw1629kOh1nVHpBnXBJnAMQlWLOuVMcKZ9glbdRQ== ;; Received 849 bytes from 192.35.51.30#53(f.gtld-servers.net) in 33 ms us-east-1.amazonaws.com. 600 IN NS ns1.p31.dynect.net. us-east-1.amazonaws.com. 600 IN NS ns2.p31.dynect.net. us-east-1.amazonaws.com. 600 IN NS ns3.p31.dynect.net. us-east-1.amazonaws.com. 600 IN NS ns4.p31.dynect.net. us-east-1.amazonaws.com. 600 IN NS pdns1.ultradns.net. us-east-1.amazonaws.com. 600 IN NS pdns3.ultradns.org. us-east-1.amazonaws.com. 600 IN NS pdns5.ultradns.info. us-east-1.amazonaws.com. 600 IN NS u1.amazonaws.com. us-east-1.amazonaws.com. 600 IN NS u2.amazonaws.com. us-east-1.amazonaws.com. 600 IN NS u3.amazonaws.com. us-east-1.amazonaws.com. 600 IN NS u4.amazonaws.com. us-east-1.amazonaws.com. 600 IN NS u5.amazonaws.com. us-east-1.amazonaws.com. 600 IN NS u6.amazonaws.com. ;; Received 602 bytes from 205.251.192.27#53(r1.amazonaws.com) in 15 ms ec2.us-east-1.amazonaws.com. 900 IN NS ns-911.amazonaws.com. ec2.us-east-1.amazonaws.com. 900 IN NS ns-912.amazonaws.com. ec2.us-east-1.amazonaws.com. 900 IN NS ns-921.amazonaws.com. ec2.us-east-1.amazonaws.com. 900 IN NS ns-923.amazonaws.com. ec2.us-east-1.amazonaws.com. 900 IN NS ns-931.amazonaws.com. ec2.us-east-1.amazonaws.com. 900 IN NS ns-932.amazonaws.com. ;; Received 182 bytes from 156.154.66.10#53(u3.amazonaws.com) in 1 ms ec2.us-east-1.amazonaws.com. 600 IN CNAME ec2.amazonaws.com. ec2.amazonaws.com. 60 IN A 52.46.143.246 ;; Received 79 bytes from 34.196.62.143#53(ns-921.amazonaws.com) in 1 ms
ルートから問い合わせる場合は、正しく名前解決できました。
ec2.amazonaws.com
はどうでしょうか。
$ dig ec2.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44661 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ec2.amazonaws.com. IN A ;; ANSWER SECTION: ec2.amazonaws.com. 28 IN A 209.54.181.211 ;; Query time: 2 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Mon Aug 29 00:30:18 UTC 2022 ;; MSG SIZE rcvd: 62
こちらについては名前解決できました。
APIを叩けるのかも確認してみます。
# インスタンスメタデータからインスタンスIDを取得 $ instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) # 自身のインスタンスIDをAWS CLIで表示 $ aws ec2 describe-instances \ --instance-ids "$instance_id" \ --query 'Reservations[*].Instances[*].{Instance:InstanceId}' \ --region us-east-1 Could not connect to the endpoint URL: "https://ec2.us-east-1.amazonaws.com/"
サービスエンドポイント(ec2.us-east-1.amazonaws.com
)にアクセスできず、失敗してしまいました。名前解決もできないので当然といえば当然ですね。
VPCエンドポイントにサブネットを指定してみる
それでは、VPCエンドポイントにサブネットを指定してみます。
# VPCエンドポイントにサブネットを指定 $ aws ec2 modify-vpc-endpoint \ --vpc-endpoint-id vpce-0d4e6262d3e098393 \ --add-subnet-ids subnet-01547e4c9f8156a10 \ --region us-east-1 { "Return": true } # VPCエンドポイントの確認 $ aws ec2 describe-vpc-endpoints { "VpcEndpoints": [ { "VpcEndpointId": "vpce-0d4e6262d3e098393", "VpcEndpointType": "Interface", "VpcId": "vpc-07715c76106d55335", "ServiceName": "com.amazonaws.us-east-1.ec2", "State": "available", "PolicyDocument": "{\n \"Statement\": [\n {\n \"Action\": \"*\", \n \"Effect\": \"Allow\", \n \"Principal\": \"*\", \n \"Resource\": \"*\"\n }\n ]\n}", "RouteTableIds": [], "SubnetIds": [ "subnet-01547e4c9f8156a10" ], "Groups": [ { "GroupId": "sg-0d60564602ac7b781", "GroupName": "Ec2InstaceStack-VPCEndpointSG3E5EA584-3S12B3HWZ9I0" } ], "IpAddressType": "ipv4", "DnsOptions": { "DnsRecordIpType": "ipv4" }, "PrivateDnsEnabled": true, "RequesterManaged": false, "NetworkInterfaceIds": [ "eni-0a176cb760eae7ac8" ], "DnsEntries": [ { "DnsName": "vpce-0d4e6262d3e098393-6i1wgrnd.ec2.us-east-1.vpce.amazonaws.com", "HostedZoneId": "Z7HUB22UULQXV" }, { "DnsName": "vpce-0d4e6262d3e098393-6i1wgrnd-us-east-1a.ec2.us-east-1.vpce.amazonaws.com", "HostedZoneId": "Z7HUB22UULQXV" }, { "DnsName": "ec2.us-east-1.amazonaws.com", "HostedZoneId": "Z01562193PES35W8HNPFL" }, { "DnsName": "ec2.us-east-1.api.aws", "HostedZoneId": "Z015729631CHLB73NFWL8" } ], "CreationTimestamp": "2022-08-29T00:25:48.965000+00:00", "Tags": [], "OwnerId": "<AWSアカウントID>" } ] }
サブネットを指定するとENIが作成され、DNS名も設定されましたね。
サブネット指定後、ec2.us-east-1.amazonaws.com
を名前解決してみます。
$ dig ec2.us-east-1.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2.us-east-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35097 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ec2.us-east-1.amazonaws.com. IN A ;; ANSWER SECTION: ec2.us-east-1.amazonaws.com. 60 IN A 10.0.1.60 ;; Query time: 4 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Mon Aug 29 00:39:52 UTC 2022 ;; MSG SIZE rcvd: 72
サブネットを指定してから5分ぐらいで、名前解決できるようになりました。名前解決されたIPアドレスはVPC CIDR内のプライベートIPアドレスですね。
ec2.amazonaws.com
も名前解決してみます。
$ dig ec2.amazonaws.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> ec2.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25301 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ec2.amazonaws.com. IN A ;; ANSWER SECTION: ec2.amazonaws.com. 34 IN A 52.46.142.78 ;; Query time: 4 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Mon Aug 29 00:41:21 UTC 2022 ;; MSG SIZE rcvd: 62
名前解決できました。こちらはグローバルIPアドレスのままです。
APIも叩けるか確認してみます。
# インスタンスメタデータからインスタンスIDを取得 $ instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) # 自身のインスタンスIDをAWS CLIで表示 $ aws ec2 describe-instances \ --instance-ids "$instance_id" \ --query 'Reservations[*].Instances[*].{Instance:InstanceId}' \ --region us-east-1 [ [ { "Instance": "i-021d5a5d8a3770f22" } ] ]
正常に実行できるようになりました。
インターフェイス型のVPCエンドポイントを作成する際は必ずサブネットを指定しよう
サブネットを指定せずに、インターフェイス型のVPCエンドポイントを作成した場合にどのような影響があるのかを確認してみました。
サブネットを指定しない = ENIが作成されない = サービスエンドポイントの名前解決ができない
というように、インターフェイス型のVPCエンドポイントを作成する際にサブネットを指定しないと思わぬトラブルに繋がりそうです。
例えば、本番運用しているVPCで、Cloud Watch LogsのVPCエンドポイントをサブネットを指定せずに作成すると、CloudWatch Logsにログを転送できなくなる なんてことになりそうです。
インターフェイス型のVPCエンドポイントを作成する際は必ずサブネットを指定しましょう。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!